// axios插件
import axios from "axios";
// 可选是否插入
// store插件
// import store from "@/store";
// router插件
// import router from "@/router";
// 导入qs插件
// import qs from 'qs';

// 是否允许跨域时携带cookie信息[不允许]
axios.defaults.withCredentials = false;

// 设置token认证接口时，配置axios的默认表头设置【默认打开页面时是没有token】
let token = "";
axios.defaults.headers.common["Authorization"] = token;

// axios实例中配置默认的访问服务器端口
let url = "http://127.0.0.1:8093"; //如果项目打包时，此处为空
let instance = axios.create({
  baseURL: url,
});

// 请求拦截器：在发送post/get请求之前，判断是否在本地中存储了token，如果有添加到headers内，后台会子级判断token是否过期
instance.interceptors.request.use(
  (config) => {
    // 拦截成功的操作
    // 获取本地的token
    let token = localStorage.getItem("token");
    // 判断是否存在token
    // if(token){
    config.headers.Authorization = "bearer" + token;
    // }
    // 返回配置
    return config;
  },
  (error) => {
    // 拦截失败的操作
    return Promise.reject(error);
  }
);

// 相应拦截器：用于拦截后台的报错处理
instance.interceptors.response.use(
  (response) => {
    // 向应成功
    return response;
  },
  (err) => {
    // 相应失败
    // 判断接口返回的错误是否为真
    if (err.response) {
      // 判断状态码
      switch (err.response.status) {
        case 401:
          console.log("账号或密码错误");
          // 登陆失败，清楚之前的token
          localStorage.setItem("token", "");
          // 返回登录页
          this.$router.push("/");
          break;
        case 403:
          console.log("非法闯入，进入访问");
          break;
        default:
          console.log("请求错误");
          break;
      }
    }
    // 返回接口的信息提示
    return Promise.reject(err.response.data);
  }
);

// 导出axiso实例【没有请求封装时需要开启】
export default instance;

// 请求方式的封装【不需要导出axios实例】

// get请求封装：url参数：get请求的地址：data参数：请求时拼接到地址栏的参数
// export let $get = ( url , data )=>{
// 	return instance.get( url , {
// 		params : params,
// 	})
// }

// post请求需要封装三种类型

// 1.post请求并提交json数据的函数
// url请求地址：data是提交的数据
// export let $postJson = ( url , data )=>{
// 	return instrance.post( url , data , {
// 		headers : { 'Content-Type' : 'application/json' }
// 	} )
// }

// 2.post请求并上传文件
// url请求地址：formdata含有文件上传框的表单数据对象
// export let $postUpload = ( url , formdata )=>{
// 	return instrance.post( url , formdata , {
// 		headers : { 'Content-Type' : 'multipart/form-data' }
// 	} )
// }

// 3.post请求：将提交的数据当作请求地址的参数进行提交
// url请求地址：data提交的数据
// export let $post = ( url , data )=>{
// 	// 将data的数据通过qs转换
// 	let qsdata  = qs.stringify( data );
// 	return instrance.post( url , qsdata , {
// 		headers : { 'Content-Type' : 'application/x-mmm-form-urlencoded' }
// 	} )
// }
